﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.DataVisualization.Charting;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G9Reporte
{
    public partial class ReporteFinal : System.Web.UI.Page
    {
        Logica.Clases.Reporte reporte = new Logica.Clases.Reporte();
        public static List<Estudiante> estudiantes = new List<Estudiante>();
        public static List<Evaluacion> evaluaciones = new List<Evaluacion>();

        /// <summary>
        /// Se carga la pagina
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //se valida que sea un profesor sino regresa a la pagina inicio
            string miRol = (string)Session["rol"];

            if (miRol != "Profesor")
                Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");

            if (!Page.IsPostBack)
            {
                //se carga la informacion del profesor
                Profesor miProfe = new Profesor();
                miProfe = (Profesor)Session["Usuario"];
                Label1.Text = "Profesor(a): " + miProfe.Nombre + " " + miProfe.Apellido;
                Label2.Text = ReporteSeleccion.nombreMateria;
                string seccionSeleccionada = ReporteSeleccion.seccionSeleccionada;
                //se llama a las funciones de consultar notas y consultar estudiantes
                //en la clase reporte
                evaluaciones = reporte.ConsultarNotas(Convert.ToInt32(seccionSeleccionada));  
                estudiantes = reporte.ConsultarEstudiantes(Convert.ToInt32(seccionSeleccionada));
                
                ConsultaNotas(evaluaciones, estudiantes);

                if (estudiantes.Count.Equals(0))
                {
                    Label5.Text = "No hay alumnos inscritos";
                    Label5.ForeColor = System.Drawing.Color.Red;
                    Table2.Visible = false;
                    Chart1.Visible = false;
                    tabla.Visible = false;
                }
                if (evaluaciones.Count.Equals(0))
                {
                    Label6.Text = "No hay evaluaciones asignadas";
                    Label6.ForeColor = System.Drawing.Color.Red;
                    Table2.Visible = false;
                    Chart1.Visible = false;
                    tabla.Visible = false;
                }
            }

        }

        /// <summary>
        /// Consulta las notas de cada uno de los estudiantes en la seccion seleccionada
        /// </summary>
        public void ConsultaNotas(List<Evaluacion> evaluaciones, List<Estudiante> estudiantes)
        {
            int i = 0;
            List<int> calculo = new List<int>();
            List<String> notasEstudiantes = new List<String>();
            List<String> nombresEstudiantes = new List<String>();

            //se calcula la definitiva de cada alumno en la seccion y se ingresan a una lista
            while (i < estudiantes.Count)
            {
                List<decimal> notasConsultadas = new List<decimal>();
                notasConsultadas = reporte.ConsultarNotasAlumno(estudiantes[i].IdEst, evaluaciones);
                int definitivas = Convert.ToInt32(reporte.CalcularDefinitivaAlumnos(evaluaciones,notasConsultadas));
                calculo.Add(definitivas);
                notasEstudiantes.Add(Convert.ToString(definitivas));
                nombresEstudiantes.Add(estudiantes[i].Nombre + " " + estudiantes[i].Apellido);
                i++;
            }

            Graficar(calculo, nombresEstudiantes);
            LlenarTabla(notasEstudiantes, nombresEstudiantes, i);
        }

        /// <summary>
        /// Se utiliza para dibujar el grafico con los datos dados
        /// </summary>
        public void Graficar(List<int> calculo, List<string> numEstudiantes)
        {
            Title title = new Title("Nota Final");
            title.Font = new System.Drawing.Font("Arial", 20);
            Chart1.Titles.Add(title);
            Chart1.Series.Add(new Series());
            Chart1.Series[0].Points.DataBindXY(numEstudiantes, calculo);
            Chart1.ImageType = System.Web.UI.DataVisualization.Charting.ChartImageType.Jpeg;
            Chart1.Legends.Add(new Legend());
            Chart1.Legends[0].Enabled = false;
            Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
            Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
           
        }

        /// <summary>
        /// Se llena la tabla con la informacion de las notas definitivas de cada alumno
        /// </summary>
        public void LlenarTabla(List<String> notasEstudiantes, List<String> nombreEstudiantes, int numeroEstudiantes)
        {
            //se crea un nuevo registro para la tabla
            TableRow registroTabla = new TableRow();
            Table2.Rows.Add(registroTabla);

            //se crea una celda para esta tabla.
            TableCell celdaTabla = new TableCell();
            celdaTabla.Width = 100;
            registroTabla.Cells.Add(celdaTabla);

            //se crean las celdas con los encabezados
            System.Web.UI.WebControls.Label labelCabecera = new Label();
            labelCabecera.Text = "Nombre";
            celdaTabla.Font.Bold = true;
            celdaTabla.Controls.Add(labelCabecera);

            celdaTabla = new TableCell();
            celdaTabla.Width = 100;
            celdaTabla.Font.Bold = true;
            registroTabla.Cells.Add(celdaTabla);
            labelCabecera = new Label();
            labelCabecera.Text = "Definitiva";
            celdaTabla.Controls.Add(labelCabecera);

            int i = 0;

            //se crean las celdas con el nombre y nota de cada estudiante
            while (i < notasEstudiantes.Count)
            {
                TableRow registroTabla2 = new TableRow();
                Table2.Rows.Add(registroTabla2);

                TableCell celdaTabla2 = new TableCell();
                registroTabla2.Cells.Add(celdaTabla2);
                System.Web.UI.WebControls.Label labelRegistro = new Label();
                labelRegistro.Text = nombreEstudiantes[i];
                celdaTabla2.Controls.Add(labelRegistro);

                TableCell celdaTabla3 = new TableCell();
                registroTabla2.Cells.Add(celdaTabla3);
                System.Web.UI.WebControls.Label labelRegistro3 = new Label();
                labelRegistro3.Text = notasEstudiantes[i];
                celdaTabla3.Controls.Add(labelRegistro3);
                i++;
            }

            //se crea las celdas con el total de estudiantes de la seccion
            TableRow registroTabla3 = new TableRow();
            Table2.Rows.Add(registroTabla3);

            TableCell celdaTabla4 = new TableCell();
            registroTabla3.Cells.Add(celdaTabla4);
            celdaTabla4.Font.Bold = true;
            System.Web.UI.WebControls.Label labelRegistro5 = new Label();
            labelRegistro5.Text = "N° Estudiantes";
            celdaTabla4.Controls.Add(labelRegistro5);

            TableCell celdaTabla5 = new TableCell();
            registroTabla3.Cells.Add(celdaTabla5);
            celdaTabla5.Font.Bold = true;
            System.Web.UI.WebControls.Label labelRegistro4 = new Label();
            labelRegistro4.Text = Convert.ToString(numeroEstudiantes);
            celdaTabla5.Controls.Add(labelRegistro4);
            
        }

        /// <summary>
        /// Se imprime la informacion en la pagina
        /// </summary>
        protected void Button1_Click(object sender, EventArgs e)
        {
            Session["ctrl"] = Panel1;
            ConsultaNotas(evaluaciones, estudiantes);
            ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script language=javascript>window.open('ImprimirReporte.aspx','PrintMe','height=500px,width=500px,scrollbars=1');</script>");
        }

        /// <summary>
        /// Retorna a la pagina seleccion de reporte
        /// </summary>
        protected void Button3_Click(object sender, EventArgs e)
        {
            Response.Redirect("ReporteSeleccion.aspx");

        }
    }
}